/*
  EJERCICIO:
     El codigo de este ejercicio lee -como el ejercicio anterior- una linea desde
     la entrada. Luego usa la funcion  'palabras' para obtener una lista de las
     palabras ingresadas. Esa lista es filtrada para extraer los paises encontrados
     encontrados en el texto.

     Ejemplo de ejecucion:
     Ingresa un texto y presiona ENTER para terminar:
     Argentina es un pais que forma parte del Mercosur al igual que Brazil

     Paises ingresados:
     Argentina
     Brazil

     La tarea a realizar consiste en:
      - Implementar la funcion estaEnLista(valor,lista)  que retorna true si el valor
         esta en la lista y false en caso contrario
      - Implementar la funcion  extraerPaises(palabras, paises) que retorna una
        lista de los paises encontrados en la lista de palabras

        Ayuda:
            Cuenta con la funcion aMinuscula(palabra) que convierte una palabra a
            minusculas
            Utilice la funcion estaEnLista
*/
package cursopoo.ejercicios

import static cursopoo.herramientas.EjerciciosIniciales.*

// Las listas se definen con valores entre corchetes []
def paises = ['argentina', 'uruguay', 'paraguay', 'chile', 'bolivia', 'brazil']

println "Los paises que reconoce el programa son: $paises"

println 'Ingresa un texto y presiona ENTER para terminar:'
def texto = leerLineaDesdeLaConsola()

def palabrasIngresadas = palabras(texto)
def paisesIngresados = extraerPaises(palabrasIngresadas, paises)
def npaises = longitud(paisesIngresados)

if (npaises == 0) {
    println 'No se ingreso ningun pais'
} else {
    println ''
    println 'Paises ingresados: '
    for (def i = 0; i < npaises; i++) {
        println paisesIngresados[i]
    }
}

def extraerPaises(palabras, paises) {
    // Solo [] indica una lista vacia
    def resultado = []
    // PARAHACER Implementar
    // CAMBIAR
    for (def i = 0; i < longitud(palabras); i++) {
        if (estaEnLista(aMinuscula(palabras[i]), paises)) {
            // usamos la rutina agregar definida en EjerciciosIniciales para mantener
            // un codigo estilo "estructurado"... mas adelante veremos la forma de
            // agregar elementos a una lista en Groovy
            agregar(resultado, palabras[i])
        }
    }
    // PORNADA
    return resultado
}

def estaEnLista(valor, lista) {
    // PARAHACER esta funcion retorna verdadero si el valor esta en la lista
    // CAMBIAR
    for (def i = 0; i < longitud(lista); i++) {
        if (lista[i] == valor) {
            return true
        }
    }
    return false
    // POR return false
}